<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>systemd.dnssd
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>systemd.dnssd 中文手册</h1><h2 id="auth_name">译者：<strong><a href="http://www.jinbuguo.com/">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="http://www.jinbuguo.com/">金步国作品集</a> [ <a href="http://www.jinbuguo.com/">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="systemd.dnssd"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>systemd.dnssd — DNS服务发现配置</p></div><div class="refsynopsisdiv"><h2>大纲</h2><p><code class="filename"><em class="replaceable"><code>network_service</code></em>.dnssd</code></p></div><div class="refsect1"><a name="id-1.5"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="systemd.dnssd.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p>DNS服务发现(DNS Service Discovery)功能由
    <a href="systemd-resolved.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-resolved.service</span>(8)</span></a> 实现。
    </p><p>注意，网络服务的Dnssd文件必须以 <code class="filename">.dnssd</code> 作为后缀名，
    否则将被忽略。</p><p>Dnssd文件分别位于：
    系统网络目录(<code class="filename">/usr/lib/systemd/dnssd</code>)、
    运行时网络目录(<code class="filename">/run/systemd/dnssd</code>)、
    本机网络目录(<code class="filename">/etc/systemd/dnssd</code>)。
    所有的Dnssd文件(无论位于哪个目录中)，统一按照文件名的字典顺序处理。对于不同目录下的同名Dnssd文件，仅以优先级最高的目录中的那一个为准。
    具体说来就是：<code class="filename">/etc/</code> 的优先级最高、<code class="filename">/run/</code> 的优先级居中、<code class="filename">/usr/lib/</code> 的优先级最低。
    如果系统管理员想要屏蔽 <code class="filename">/usr/lib/</code> 目录中的某个Dnssd文件，
    那么最佳做法是在 <code class="filename">/etc/</code> 目录中创建一个指向 <code class="filename">/dev/null</code> 的同名符号链接，
    即可彻底屏蔽 <code class="filename">/usr/lib/</code> 目录中的同名文件。</p><p>对于例如 <code class="filename">foo.dnssd</code> 这样的Dnssd文件，可以同时存在对应的
    <code class="filename">foo.dnssd.d/</code> 目录，当解析完Dnssd文件之后，目录中所有以
    "<code class="literal">.conf</code>" 结尾的文件，都会被按照文件名的字典顺序，依次解析(相当于依次附加到Dnssd文件的末尾)。
    这样就可以方便的修改Dnssd文件，或者为Dnssd文件添加额外的设置，而无需修改Dnssd文件本身。
    注意，所有配置片段("<code class="literal">.conf</code>" 文件)必须包含明确的小节头(例如 "<code class="literal">[Service]</code>" 之类)。</p><p> "<code class="literal">.d</code>" 目录除了可以放置在 <code class="filename">/etc/systemd/dnssd</code> 目录中，
    还可以放置在 <code class="filename">/usr/lib/systemd/dnssd</code> 与 <code class="filename">/run/systemd/dnssd</code> 目录中。
    所有 "<code class="literal">.d/</code>" 目录中的配置片段都会覆盖Dnssd文件的设置(无论Dnssd文件位于哪个目录)。
    虽然在优先级上，<code class="filename">/etc</code> 中的配置片段优先级最高、
    <code class="filename">/run</code> 中的配置片段优先级居中、<code class="filename">/usr/lib</code> 中的配置片段优先级最低。
    但是由于 <code class="filename">/run</code> 是临时目录，而 <code class="filename">/usr/lib</code> 仅供软件包使用，
    所以在实践中，"<code class="literal">.d/</code>" 目录仅会放置在
    <code class="filename">/etc/systemd/dnssd</code> 目录中。</p></div><div class="refsect1"><a name="id-1.6"></a><h2 id="[Service] 小节选项">[Service] 小节选项<a class="headerlink" title="Permalink to this headline" href="systemd.dnssd.html#%5BService%5D%20%E5%B0%8F%E8%8A%82%E9%80%89%E9%A1%B9">¶</a></h2><p>Dnssd文件中只包含一个 "<code class="literal">[Service]</code>" 小节，
      用于定义一个可发现网络服务，
      可通过组播DNS(Multicast DNS)在局域网内宣告。</p><div class="variablelist"><dl class="variablelist"><dt id="Name="><span class="term"><code class="varname">Name=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#Name=">¶</a></dt><dd><p>网络服务的实例名称。必须符合 <a class="ulink" href="https://tools.ietf.org/html/rfc6763" target="_top">RFC 6763</a> 4.1.1小节的规范(例如"<code class="literal">webserver</code>")。</p><p>此选项支持的替换符：</p><div class="table"><a name="id-1.6.3.1.2.3"></a><p class="title"><b>表 1. 替换符</b></p><div class="table-contents"><table class="table" summary="替换符" border="1"><colgroup><col align="left" class="spec"><col align="left" class="mean"></colgroup><thead><tr><th align="left">替换符</th><th align="left">含义</th></tr></thead><tbody><tr><td align="left">"<code class="literal">%m</code>"</td><td align="left">当前系统的"machine ID"字符串。详见 <a href="machine-id.html#"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> 手册。</td></tr><tr><td align="left">"<code class="literal">%b</code>"</td><td align="left">当前系统的"boot ID"字符串。详见 <a href="http://man7.org/linux/man-pages/man4/random.4.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a> 手册。</td></tr><tr><td align="left">"<code class="literal">%H</code>"</td><td align="left">当前系统的主机名</td></tr><tr><td align="left">"<code class="literal">%v</code>"</td><td align="left">内核版本(<span class="command"><strong>uname -r</strong></span> 的输出)</td></tr></tbody></table></div></div><br class="table-break"></dd><dt id="Type="><span class="term"><code class="varname">Type=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#Type=">¶</a></dt><dd><p>网络服务的类型。必须符合 <a class="ulink" href="https://tools.ietf.org/html/rfc6763" target="_top">RFC 6763</a> 4.1.2小节的规范(例如"<code class="literal">_http._tcp</code>")。
            </p></dd><dt id="Port="><span class="term"><code class="varname">Port=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#Port=">¶</a></dt><dd><p>网络服务的监听端口。</p></dd><dt id="Priority="><span class="term"><code class="varname">Priority=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#Priority=">¶</a></dt><dd><p>网络服务的优先级。也就是一个在 SRV 记录中表示优先级的数字。</p></dd><dt id="Weight="><span class="term"><code class="varname">Weight=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#Weight=">¶</a></dt><dd><p>网络服务的权重。也就是一个在 SRV 记录中表示权重的数字。</p></dd><dt id="TxtText="><span class="term"><code class="varname">TxtText=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#TxtText=">¶</a></dt><dd><p>一个空格分隔的"键=值"列表，
            用于在 TXT 记录中提供额外的附加信息(例如
             "<code class="literal">path=/portal/index.html</code>")。
            "键"与"值"中都可以包含C风格的转义字符。
            </p><p>此选项与 <code class="varname">TxtData=</code> 都可以多次使用，
            从而为该服务创建多个 TXT 记录。
            设为空字符串表示撤销此选项之前的全部已设列表。
            </p></dd><dt id="TxtData="><span class="term"><code class="varname">TxtData=</code></span><a class="headerlink" title="Permalink to this term" href="systemd.dnssd.html#TxtData=">¶</a></dt><dd><p>一个空格分隔的"键=值"列表
            用于在 TXT 记录中提供额外的附加信息。
            注意，其中的"值"必须是经过base64编码之后得到的字符串(例如
             "<code class="literal">data=YW55IGJpbmFyeSBkYXRhCg==</code>")。
            "键"与"值"中都可以包含C风格的转义字符。
            </p><p>此选项与 <code class="varname">TxtText=</code> 都可以多次使用，
            从而为该服务创建多个 TXT 记录。
            设为空字符串表示撤销此选项之前的全部已设列表。
            </p></dd></dl></div></div><div class="refsect1"><a name="id-1.7"></a><h2 id="例子">例子<a class="headerlink" title="Permalink to this headline" href="systemd.dnssd.html#%E4%BE%8B%E5%AD%90">¶</a></h2><div class="example"><a name="id-1.7.2"></a><p class="title"><b>例 1. HTTP 服务</b></p><div class="example-contents"><pre class="programlisting"># /etc/systemd/dnssd/http.dnssd
[Service]
Name=%H
Type=_http._tcp
Port=80
TxtText=path=/stats/index.html t=temperature_sensor</pre><p>这将在本机的网络接口上开启DNS组播(MulticastDNS)，
      并且使得本机上的HTTP服务在局域网内成为可发现服务。</p><p>现在， "<code class="literal">resolvectl</code>"
      应该能够将此HTTP服务解析到对应的本机主机名：</p><pre class="programlisting">$ resolvectl service meteo._http._tcp.local
meteo._http._tcp.local: meteo.local:80 [priority=0, weight=0]
                        169.254.208.106%senp0s21f0u2u4
                        fe80::213:3bff:fe49:8aa%senp0s21f0u2u4
                        path=/stats/index.html
                        t=temperature_sensor
                        (meteo/_http._tcp/local)

-- Information acquired via protocol mDNS/IPv6 in 4.0ms.
-- Data is authenticated: yes</pre><p>局域网内另一台主机上运行的 "<code class="literal">avahi</code>" 服务应该也能够看到此HTTP服务：</p><pre class="programlisting">$ avahi-browse -a -r
+ enp3s0 IPv6 meteo                                         Web Site             local
+ enp3s0 IPv4 meteo                                         Web Site             local
= enp3s0 IPv6 meteo                                         Web Site             local
   hostname = [meteo.local]
   address = [fe80::213:3bff:fe49:8aa]
   port = [80]
   txt = ["path=/stats/index.html" "t=temperature_sensor"]
= enp3s0 IPv4 meteo                                         Web Site             local
   hostname = [meteo.local]
   address = [169.254.208.106]
   port = [80]
   txt = ["path=/stats/index.html" "t=temperature_sensor"]</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="id-1.8"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="systemd.dnssd.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="systemd-resolved.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-resolved.service</span>(8)</span></a>,
      <a href="resolvectl.html#"><span class="citerefentry"><span class="refentrytitle">resolvectl</span>(1)</span></a>
    </p></div></div></body></html>
